﻿#define _CRT_SECURE_NO_WARNINGS 1
//int main()
//{
//	int a = 1;
//	int b = 3;
//	a / b = 2;//错误
//	return 0;
//}


//写一个函数，求两个整数之和，要求在函数体内不得使用 + 、 - 、 * 、 / 四则运算符号。
//数据范围：两个数都满足
//−10≤n≤1000
//进阶：空间复杂度O(1)，时间复杂度O(1)

//int Add(int num1, int num2)
//{
//    int n = 0;
//    int m = 0;
//    do
//    {
//        n = (num1 & num2) << 1;//进位
//        m = num1 ^ num2; //有一位为1
//        num1 = n;
//        num2 = m;
//
//    } while (n & m);//如果n和m没有重合的1结束
//
//    return m | n;
//}



//给你一个含 n 个整数的数组 nums ，其中 nums[i] 在区间[1, n] 内。请你找出所有在
// [1, n]范围内但没有出现在 nums 中的数字，并以数组的形式返回结果。

//哈希表
int* findDisappearedNumbers(int* nums, int numsSize, int* returnSize)
{
    int i = 0;
    int x = 0;
    for (i = 0; i < numsSize; i++)
    {
        x = (nums[i] - 1) % numsSize;
        nums[x] += numsSize;
    }

    *returnSize = 0;
    int* arr = (int*)malloc(sizeof(int) * numsSize);

    for (i = 0; i < numsSize; i++)
    {
        if (nums[i] <= numsSize)//如果刚好此处等于numsSize
            arr[(*returnSize)++] = i + 1;
    }

    return arr;

}



